"""
    进行办法三的价格得分统计
"""
# 输入厂家名称及报价
prices = {}
scores = {}
score = 0
print('请输入厂家个数：')
n = int(input())

# 输出投标厂家名称、具体报价
for i in range(n):
    client_name = input("请输入投标厂家简称：")
    price = float(input("请输入投标价格（万元）："))
    prices[client_name] = price


def score_minus_compute(predict_def):
    # 根据标的估值判断扣分分值
    if predict_def >= 3000:
        score_minus_def = 1.2
        print("标的估值额在3000万元及以上，每高出1%基准价，扣{}分".format(score_minus_def))
    elif 1000 <= predict_def < 3000:
        score_minus_def = 1
        print("标的估值额在1000-3000万元之间，每高出1%基准价，扣{}分".format(score_minus_def))
    elif 500 <= predict_def < 1000:
        score_minus_def = 0.8
        print("标的估值额在500-1000万元之间，每高出1%基准价，扣{}分".format(score_minus_def))
    else:
        score_minus_def = 0.7
        print("标的估值额在500以下，每高出1%基准价，扣{}分".format(score_minus_def))
    return score_minus_def


# 得出扣分分值
predict = float(input("请输入标的估值金额（万元）："))
score_minus = score_minus_compute(predict)

# 对报价进行排序
m = sorted(prices.values(), key=(lambda x: x))
print("按报价由低到高排序：", m)

# 取最低价
if n >= 7:
    P_min = m[1]
    print("投标人数量在7家及以上时，取次低价{}参与基准价计算".format(P_min))
else:
    P_min = m[0]
    print("投标人数量在7家以下时，取最低价{}参与基准价计算".format(P_min))

# 计算平均价部分
# 若有投标人评标价超过1.25倍平均价或低于0.6倍平均价，则分别以1.25倍平均价或0.6倍平均价代入，重新计算平均价
P_mean_pre = sum(prices.values()) / n  # 预先计算平均价
for name, price in prices.items():
    if price > (1.25 * P_mean_pre):
        print(f"{name}的报价超过1.25倍平均价，以1.25倍平均价代入，重新计算平均价")
        prices[name] = 1.25 * P_mean_pre
    elif price < (0.6 * P_mean_pre):
        print(f"{name}的报价低于0.6倍平均价，以0.6倍平均价代入，重新计算平均价")
        prices[name] = 0.6 * P_mean_pre


# 若投标人数量在7家及以上时，去掉一个最高评标价和一个最低评标价后，计算平均价；若在7家以下，直接计算平均价
m_1 = sorted(prices.values(), key=(lambda x: x))
print("检查完厂家报价与1.25倍平均价或0.6倍平均价大小后，按报价由低到高排序：", m_1)
if n >= 7:
    print("投标人数量在7家及以上时，去掉一个最高评标价和一个最低评标价后，计算平均价；")
    del m_1[0], m_1[-1]
    P_mean = sum(m_1) / (n - 2)
    print("平均价为{}万元".format(P_mean))
else:
    P_mean = sum(m_1) / n
    print("平均价为{}万元".format(P_mean))

# 求基准价
base_price = 0.5 * P_mean + 0.5 * P_min
print("基准价为{}万元".format(base_price))


# 根据基准价求对应厂家的分值
for name, price in prices.items():
    if price == base_price:
        score_price = 100
    elif price > base_price:
        per = (price - base_price) / base_price * 100  # 高出基准价的百分比
        print(f"{name}的报价高出基准价{round(per,2)}%")
        score = 100 - per * score_minus
    else:
        per = (base_price - price) / base_price * 100  # 低于基准价的百分比
        print(f"{name}的报价低于基准价{round(per,2)}%")
        if per <= 10:
            score = 100 - 0.3 * per
        elif 10 < per <= 20:
            score = 100 - 0.5 * per
        else:
            score = 100 - per
    if score < 60:
        score = 60
    scores[name] = score

print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以下为得分区域~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
# 输出各厂家得分
for name, score in scores.items():
    print(f"{name}：{round(score,2)}分")